s5p sdhci: call pinmux for card's gpio pins before use them
authorPrzemyslaw Marczak <[email protected]>
Wed, 28 Oct 2015 14:41:50 +0000 (15:41 +0100)
committerMinkyu Kang <[email protected]>
Mon, 2 Nov 2015 01:38:14 +0000 (10:38 +0900)
The SD card detection depends on checking one pin state.
But the pin was configured after card was detected, which is wrong.

This commit fixes this, by moving call to pinmux before use the pin.

Tested-on: Odroid U3 and Odroid X2.

Signed-off-by: Przemyslaw Marczak <[email protected]>
Cc: Guillaume GARDET <[email protected]>
Cc: Lukasz Majewski <[email protected]>
Cc: Jaehoon Chung <[email protected]>
Cc: Minkyu Kang <[email protected]>
Cc: Simon Glass <[email protected]>
Acked-by: Jaehoon Chung <[email protected]>
Tested-by: Lukasz Majewski <[email protected]>
Signed-off-by: Minkyu Kang <[email protected]>
drivers/mmc/s5p_sdhci.c

index 15ecfee961b4a9ed4b0b3ee2d20fad973373ddcd..44353c72f4d706d45d3acf29b9074320c819de88 100644 (file)
@@ -106,6 +106,12 @@ static int do_sdhci_init(struct sdhci_host *host)
        flag = host->bus_width == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE;
        dev_id = host->index + PERIPH_ID_SDMMC0;
 
+       ret = exynos_pinmux_config(dev_id, flag);
+       if (ret) {
+               printf("external SD not configured\n");
+               return ret;
+       }
+
        if (dm_gpio_is_valid(&host->pwr_gpio)) {
                dm_gpio_set_value(&host->pwr_gpio, 1);
                ret = exynos_pinmux_config(dev_id, flag);
@@ -121,12 +127,6 @@ static int do_sdhci_init(struct sdhci_host *host)
                        debug("no SD card detected (%d)\n", ret);
                        return -ENODEV;
                }
-
-               ret = exynos_pinmux_config(dev_id, flag);
-               if (ret) {
-                       printf("external SD not configured\n");
-                       return ret;
-               }
        }
 
        return s5p_sdhci_core_init(host);
@@ -193,7 +193,7 @@ static int process_nodes(const void *blob, int node_list[], int count)
                }
 
                ret = do_sdhci_init(host);
-               if (ret) {
+               if (ret && ret != -ENODEV) {
                        printf("%s: failed to initialize dev %d (%d)\n", __func__, i, ret);
                        failed++;
                }